import Vue from 'vue';
import iView from 'iview';
import axios from 'axios';
import Aplayer from 'vue-aplayer';
import Moment from 'moment'; // 时间处理插件
import {router} from './router/index';
import {appRouter} from './router/router';
import store from './store';
import App from './app.vue';
import '@/locale';
import 'iview/dist/styles/iview.css';
import VueI18n from 'vue-i18n';
import util from './libs/util';
import Bus from '../vue-bus';
import '../my-theme/index.less';

Vue.use(VueI18n);
Vue.use(iView);
Vue.use(Bus);

// axios 配置
axios.defaults.baseURL = store.state.app.WEBROOT
// 请求超时
axios.defaults.timeout = 10000
// 表示跨域请求时是否需要使用凭证
axios.defaults.withCredentials = true
// http request 拦截器
axios.interceptors.request.use(
    config => {
        // 调用加载窗口
        util.load(store.state)
        if (store.state.app.token) {  // 判断是否存在token，如果存在的话，则每个http header都加上token
            config.headers.access_token = store.state.app.token;
        }
        return config;
    },
    err => {
        util.complete(router.app)
        return Promise.reject(err);
    }
);
// http response 拦截器
axios.interceptors.response.use(
    response => {
        setTimeout(function() {
           util.complete(router.app) 
        }, 300)
        return response;
    },
    error => {
        if (error.response) {
            util.complete(router.app)
            switch (error.response.status) {
                case 500: 
                    // window.location.reload()
                    break;
            }
        }
        return Promise.reject(error.response.data)   // 返回接口返回的错误信息
    }
);
// 创建小程序请求实例
var appServer = axios.create({
    baseURL: store.state.app.APPROOT,
    timeout: '10000'
})
// http request 拦截器
appServer.interceptors.request.use(
    config => {
        // 调用加载窗口
        util.load(store.state)
        return config;
    },
    err => {
        util.complete(router.app)
        return Promise.reject(err);
    }
);
// http response 拦截器
appServer.interceptors.response.use(
    response => {
        setTimeout(function() {
            util.complete(router.app)
        }, 300)
        return response;
    },
    error => {
        if (error.response) {
            util.complete(router.app)
            switch (error.response.status) {
                case 500:
                    // window.location.reload()
                    break;
            }
        }
        return Promise.reject(error.response.data)   // 返回接口返回的错误信息
    }
);
Vue.prototype.$ajax = axios;
Vue.prototype.$app = appServer;
Vue.prototype.$moment = Moment;
Vue.filter("dateFormatter", function (value) {
    return Moment(value).format('HH点mm分')
});

new Vue({
    el: '#app',
    router: router,
    store: store,
    render: h => h(App),
    components: {
        Aplayer
    },
    data: {
        currentPageName: ''
    },
    mounted () {
        this.currentPageName = this.$route.name;
        // 显示打开的页面的列表
        this.$store.commit('setOpenedList');
        this.$store.commit('initCachepage');
        // 权限菜单过滤相关
        // this.$store.commit('updateMenulist');
        // iview-admin检查更新
        // util.checkUpdate(this);
    },
    created () {
        let tagsList = [];
        appRouter.map((item) => {
            if (item.children.length <= 1) {
                tagsList.push(item.children[0]);
            } else {
                tagsList.push(...item.children);
            }
        });
        this.$store.commit('setTagsList', tagsList);
    },
    destroyed () {
    }
});
